INTRODUCCIÓN

¿Qué es R y RStudio?

RStudio es una interfaz libre y gratuita que nos permite explotar todo el potencial que tiene el lenguaje de programación R.

R es un lenguaje que ofrece una gran variedad de funciones para realizar cálculos estadísticos y generar diversos gráficos a partir de los datos. Sin embargo, el gran potencial está en que, al ser libre y colaborativo, constantemente los usuarios están actualizando y ampliando la cantidad de funciones que presenta. Hoy en día podemos realizar desde operaciones básicas sobre los datos hasta aplicar algoritmos de inteligencia artificial.

A su vez, dentro de RStudio, hay diferentes formatos de archivos (RMarkdown, RScript, RNotebook, etc) y su elección depende del objetivo que tengamos. En nuestro caso, a lo largo del curso trabajaremos con el formato RMarkdown, un tipo de documento de RStudio que integra texto con código de R y nos permite generar informes a partir de los datos.

Empecemos de a poco:

Lo primero que debemos hacer es descargar e instalar el Lenguaje de programación R y después la interfaz RStudio. Es necesario que la instalación sea en ese orden para ser exitosa.

Luego vamos a crear un nuevo proyecto y un nuevo RMarkdown. Crear un proyecto nos ayudará a darle orden a nuestro trabajo ya que todos los datos que vayamos utilizando y todos los RMarkdown que vayamos generando quedarán vinculados al convivir dentro del mismo proyecto/carpeta.

¿Cómo crear un Nuevo Proyecto de R?

Paso 1

Una vez instalados el lenguaje y la interfaz, debemos abrir RStudio. Nos encontraremos con una pantalla que al principio puede resultar poco intuitiva, pero no se asusten que de a poco iremos entendiendo para que sirve cada parte.

Paso 2

Ahora si, creemos nuestro primer proyecto, es decir, el directorio donde vamos a ir guardando todos los datos con los que queramos trabajar. Para mantener el orden, es recomendable crear un nuevo proyecto por temática/análisis que se desee realizar.

Para esto seleccionemos “File/New Project…”

Paso 3

Luego seleccionemos “New Directory”

Paso 4

Ahora si, elijamos la opción de crear un “New Project”

Paso 5

Y luego elijamos el Directorio (carpeta/lugar de la computadora donde lo queremos guardar) y el nombre de nuestro proyecto, en mi caso lo voy a llamar “UTDT-DATOS”.

Paso 6

Listo, ¡Ya tenemos nuestro proyecto creado! Si todo salió bien, deberíamos poder verlo en el directorio que seleccionamos en el paso anterior. Recuerden que, a simple vista, el proyecto será nada más ni nada menos que una carpeta.

¿Cómo crear un RMarkdown?

Paso 1

Una vez que estoy adentro de mi proyecto, para crear un RMarkdown hay que ir a “File/New File/RMarkdown…”

Paso 2

Se abrirá una ventana donde podemos poner el título que encabezará nuestro RMarkdown, el autor, la fecha y seleccionar que tipo de documento queremos: puede ser HTML, PDF o Word. Por hoy elijamos HTML que es el más amigable para generar informes.

Paso 3

¡Misión cumplida! en muy pocos pasos ya tenemos un Proyecto de R con nuestro primer RMarkdown dentro. Si todo salió bien, deberíamos tener algo así:

Interfaz Gráfica de RStudio

Antes de seguir, analicemos un poco la Interfaz Gráfica de RStudio:

Tal como se ve en la imagen, podríamos dividir la interfaz en 4 partes/ventanas:

  1. Panel de Edición

Este panel es en el que vamos a estar creando y modificando nuestro RMarkdown. Aquí también podría haber otro formato de archivo R, como por ejemplo R Script o R Notebook.

  1. Entorno de Variables

En esta ventana iremos viendo todos los datos que hayamos cargado. Desde aquí también podremos importar o eliminar datos.

Desde la pestaña Historial podremos consultar el historial de comandos y funciones que fuimos utilizando en el Proyecto.

  1. Consola

En la ventana inferior izquierda irá apareciendo todo lo que ejecutemos tanto desde el Panel de Edición como desde el Entorno de Variables, pero también podemos escribir líneas de código que queremos que se ejecuten y que no queden escritas en el RMarkdown.

  1. Panel de Utilidades

En la ventana inferior derecha se pueden ver varias cosas:

  1. Files: El Directorio donde estamos trabajando.

  2. Plots: Las visualizaciones/gráficos que se van generando.

  3. Packages: Los paquetes de R disponibles.

  4. Help: Una sección de ayuda donde podemos consultar información de las funciones.

  5. Viewer: Un visor HTML para ver los gráficos interactivos o animados que hayamos hecho.

Formato RMarkdown

¿Para que sirve el formato RMawkdown?

Este formato sirve para manipular datos y armar informes listos para presentar.

Tenemos 2 “formas” de escribir en un RMarkdown:

  1. Texto como el que estoy escribiendo ahora.

El RMarkdown tiene una sintaxis específica para poder dar formato al texto del informe final, por ejemplo si escribimos así:

Obtenemos los siguientes resultados:

  1. Bloques de código (o “chunks”) donde insertaremos nuestras líneas de código con el objetivo de manipular (analizar, modificar, visualizar, etc.) los datos. Esto es un chunk:

Y se inserta haciendo click en Insert/R o con el siguiente atajo en el teclado: Ctrl + Alt + I

Por lo general, siempre que hagamos un Informe en RMarkdown, estará compuesto por Texto y Chunks (como este manual de clase que fue escrito completamente en RMarkdown).

Importar y analizar un dataset

A continuación vamos a trabajar con los datos del Sistema Único de Atención Ciudadana (SUACI) del Gobierno de la Ciudad de Buenos Aires. Estos datos son públicos y pueden encontrarlos en el portal BA Data.

En este caso, para facilitar la manipulación de la información, usaremos un set de datos (en formato .csv) previamente procesado que contiene datos de los contactos realizados a SUACI en Octubre del 2021. Pueden descargarlo de https://data.world/angie-scetta/suaci-oct-2021

Recomendación: Al descargarlo, moverlo de la carpeta “Descargas” a una nueva carpeta llamada “data” dentro de la carpeta del Proyecto donde estén trabajando.

Ahora si, manos a la obra! Para cargar el dataset pueden copiar la siguiente línea de código y pegarla dentro de un chunk:

suaci_202110 <- read.csv("data/suaci_202110.csv", stringsAsFactors = TRUE)

Si todo sale bien, al ejecutar el chunk anterior, deberían tener la base de datos cargada en el Entorno de Variables o Enviroment.

Ahora conozcamos nuestro dataset y veamos como se estructura (cuantas filas y columnas tiene) y que información trae.

Para esto empezaremos utilizando la función dim():

dim(suaci_202110)
## [1] 52926    10

Podemos ver que tenemos 52.926 registros/filas y 10 columnas. También podríamos ver esto por separado de la siguiente forma:

ncol(suaci_202110)
## [1] 10
nrow(suaci_202110)
## [1] 52926

Pero ¿Qué información contienen esas 10 columnas?

Esto podemos verlo con names():

names(suaci_202110)
##  [1] "contacto"         "periodo"          "categoria"        "subcategoria"    
##  [5] "prestacion"       "tipo_prestacion"  "domicilio_comuna" "domicilio_barrio"
##  [9] "canal"            "genero"

Bien, las variables tienen información que refiere a:

  • ID de contacto

  • Período/mes en que se realizó el contacto

  • Categoría, subcategoría, prestación y tipo de prestación a la que pertenece

  • Comuna y barrio donde se ubica

  • Canal por el que se realizó

  • Género del vecino/a que se contactó

Parece que cada fila/registro de la base corresponde a un único contacto/reclamo, pero veamos una pequeña muestra de la data con head() para estar seguros:

head(suaci_202110)
##      contacto periodo              categoria          subcategoria
## 1 00443037/21  202110 LIMPIEZA Y RECOLECCIÓN CESTOS Y CONTENEDORES
## 2 00442177/21  202110               TRÁNSITO         DENUNCIA VIAL
## 3 00442090/21  202110               TRÁNSITO         DENUNCIA VIAL
## 4 00442314/21  202110               TRÁNSITO         DENUNCIA VIAL
## 5 00442395/21  202110               TRÁNSITO         DENUNCIA VIAL
## 6 00442458/21  202110               TRÁNSITO         DENUNCIA VIAL
##                  prestacion tipo_prestacion domicilio_comuna domicilio_barrio
## 1 Reubicación de contenedor       Solicitud        Comuna 13         Belgrano
## 2  Vehículo mal estacionado        Denuncia        Comuna 10     Monte Castro
## 3  Vehículo mal estacionado        Denuncia         Comuna 1        San Telmo
## 4  Vehículo mal estacionado        Denuncia        Comuna 13         Belgrano
## 5  Vehículo mal estacionado        Denuncia         Comuna 1    Puerto Madero
## 6  Vehículo mal estacionado        Denuncia        Comuna 13            Nuñez
##               canal    genero
## 1        App BA 147  Femenino
## 2 App Denuncia Vial Masculino
## 3 App Denuncia Vial Masculino
## 4 App Denuncia Vial Masculino
## 5 App Denuncia Vial Masculino
## 6 App Denuncia Vial Masculino

Y un resumen estadístico de la información con summary():

summary(suaci_202110)
##         contacto        periodo                                  categoria    
##  00441631/21:    1   Min.   :202110   LIMPIEZA Y RECOLECCIÓN          :18200  
##  00441632/21:    1   1st Qu.:202110   TRÁNSITO                        :16037  
##  00441633/21:    1   Median :202110   BARRIOS EMERGENTES              : 4275  
##  00441634/21:    1   Mean   :202110   CALLES Y VEREDAS                : 4233  
##  00441635/21:    1   3rd Qu.:202110   ARBOLADO Y ESPACIOS VERDES      : 2460  
##  00441636/21:    1   Max.   :202110   ORDENAMIENTO DEL ESPACIO PÚBLICO: 1422  
##  (Other)    :52920                    (Other)                         : 6299  
##                   subcategoria  
##  DENUNCIA VIAL          :14759  
##  RESIDUOS VOLUMINOSOS   :13216  
##  REPARACIÓN DE VEREDA   : 3342  
##  CESTOS Y CONTENEDORES  : 3063  
##  LIMPIEZA DE VÍA PÚBLICA: 1906  
##  DESAGOTE               : 1898  
##  (Other)                :14742  
##                                        prestacion     tipo_prestacion 
##  Vehículo mal estacionado                   :14475   Denuncia :17891  
##  Retiro de escombros / restos de obra       : 9592   Queja    : 2434  
##  Reparación de vereda                       : 2122   Reporte  :  940  
##  Retiro de restos de jardinería domiciliaria: 1985   Servicio :13249  
##  Desagote de pozo ciego (atmosférico)       : 1898   Solicitud:18412  
##  Desobstrucción (Vactor)                    : 1761                    
##  (Other)                                    :21093                    
##   domicilio_comuna      domicilio_barrio               canal      
##  Comuna 11: 5199   Palermo      : 4091   App BA 147       :18348  
##  Comuna 12: 4993   Flores       : 3030   GCS Web          :17584  
##  Comuna 13: 4849   Caballito    : 2865   App Denuncia Vial: 7740  
##  Comuna 15: 4315   Belgrano     : 2675   Boti             : 4429  
##  Comuna 14: 4067   Villa Urquiza: 2267   Operador UGIS    : 4274  
##  Comuna 7 : 3992   (Other)      :37196   Comuna           :  376  
##  (Other)  :25511   NA's         :  802   (Other)          :  175  
##        genero     
##           : 4274  
##  Femenino :21440  
##  Masculino:27164  
##  Otros    :   48  
##                   
##                   
## 

A priori, en este resumen podemos entender varias cosas de la data. Por ejemplo:

  • Solamente Hay registros de contactos realizados en Octubre 2021.

  • La mayoría de los contactos refieren a la categoría Limpieza y recolección, seguida por Tránsito.

  • La mayoría de los contactos refieren a la subcategoría Denuncia vial, seguida por Residuos voluminosos.

  • La prestación que más veces aparece en la base es el de Vehículo mal estacionado, seguida por Retiro de escombros / restos de obra.

  • Los tipos de prestación más realizadas son la Solicitud y la Denuncia, ambas con cantidades muy similares.

  • La Comuna que más contactos tiene es la Comuna 11, seguida por la Comuna 12.

  • El Barrio que más contactos tiene es Palermo, seguido por Flores.

Por último, investiguemos como es la estructura de la data, es decir que tipo de información tiene cada campo. Si bien algo ya nos imaginamos gracias al summary(), usemos str() para revisarlo:

str(suaci_202110)
## 'data.frame':    52926 obs. of  10 variables:
##  $ contacto        : Factor w/ 52926 levels "00441631/21",..: 1407 547 460 684 765 828 921 1198 1352 1363 ...
##  $ periodo         : int  202110 202110 202110 202110 202110 202110 202110 202110 202110 202110 ...
##  $ categoria       : Factor w/ 19 levels "","ALUMBRADO",..: 10 19 19 19 19 19 19 19 19 19 ...
##  $ subcategoria    : Factor w/ 69 levels "","ACCESO A LA INFORMACIÓN PÚBLICA",..: 7 13 13 13 13 13 13 13 13 13 ...
##  $ prestacion      : Factor w/ 220 levels "Acceso a la información pública",..: 197 214 214 214 214 214 214 214 214 214 ...
##  $ tipo_prestacion : Factor w/ 5 levels "Denuncia","Queja",..: 5 1 1 1 1 1 1 1 1 1 ...
##  $ domicilio_comuna: Factor w/ 16 levels "Comuna 1","Comuna 10",..: 5 2 1 5 1 5 9 6 1 11 ...
##  $ domicilio_barrio: Factor w/ 48 levels "Agronomia","Almagro",..: 5 18 33 5 27 20 3 21 17 2 ...
##  $ canal           : Factor w/ 10 levels "App BA 147","App Denuncia Vial",..: 1 2 2 2 2 2 2 2 2 2 ...
##  $ genero          : Factor w/ 4 levels "","Femenino",..: 2 3 3 3 3 3 3 3 3 3 ...

Existen varios tipos de datos, pero en nuestro dataset nos encontramos con 2: integer (int) y Factor.

Ahora bien, ¿Qué significa eso?

  • Integer son números enteros, es decir que el campo solo admite números sin decimales como por ejemplo un DNI o la cantidad de habitaciones de una propiedad.

  • Factor son categorías, por ejemplo Barrios, Partidos, etc.

Sin embargo, también es muy común que trabajando con diferentes datasets se encuentren con variables de tipo numeric (num) o character (chr):

  • Numeric son números con decimales, como por ejemplo, latitud y longitud.

  • Character son campos que contienen letras/texto libre, como por ejemplo, mails.

Además del tipo de dato, con str() también podemos ver la cantidad de niveles que tienen las variables de tipo Factor. Por ejemplo, se observa que la columna género solo tiene 4 categorías posibles, en cambio la columna prestación tiene 211.

Bonus Track

¿Cómo hacemos si queremos ver un resumen estadístico o la estructura de una sola de las columnas del dataset? Para esto utilizamos el símbolo $ de la siguiente forma:

summary(suaci_202110$genero)
##            Femenino Masculino     Otros 
##      4274     21440     27164        48
str(suaci_202110$genero)
##  Factor w/ 4 levels "","Femenino",..: 2 3 3 3 3 3 3 3 3 3 ...

Generar el reporte en HTML

Por último, generemos nuestro primer reporte HTML para poder ver todos los resultados en un único informe que pueda ser comprensible por cualquier persona sin necesidad de saber usar R. Para esto debemos hacer click en Knit / Knit to HTML:

Ejercicios de práctica

  1. Abrir RStudio y crear un nuevo proyecto de R.

  2. Elegir y descargar de algún portal de datos abiertos/públicos un dataset que resulte de su interés en formato csv, y guardarlo en la carpeta “data” dentro del proyecto.

  3. Crear un archivo RMarkdown con texto, chunks y código que permitan hacer al menos 4 de las siguientes operaciones:

  • Abrir el csv.

  • Revisar cantidad de filas y columnas.

  • Inspeccionar los nombres de las columnas.

  • Mostrar el encabezado del dataset.

  • Generar un resumen estadístico del contenido de cada columna. Comentar resultados.

  • Analizar la estructura que presentan las columnas. Comentar resultados.

  1. Una vez finalizado el ejercicio, generar el reporte HTML con “Knit”.

El dataset pueden descargarlo de alguno de los siguientes links: